perm filename BELL.MUS[IRC,LCS] blob sn#218217 filedate 1977-03-30 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	VARIABLE I,T,BELLFREQ
C00006 ENDMK
C⊗;
VARIABLE I,T,BELLFREQ;
BELLFREQ←1400;
ARRAY F2(512),F3(512),F4(512);
EXTERNAL FUNCTION EXP(X);
FOR I←0 STEP 1 UNTIL 511 DO
  BEGIN;
    F2(I)←EXP(-I/200);
    F3(I)←EXP(-I/175)*(1-EXP(-(511-I)/25));
    F4(I)←EXP(-I/145)*SIN(I*(PI/512));
    END;

FUNCTION NORM(ARRAY A,ARRAY X);
  ⊂ VARIABLE M;
    M←ABS(X(0));
    FOR I←1 STEP 1 UNTIL 511 DO
        IF ABS(X(I))>M THEN M←ABS(X(I));
    FOR I←0 STEP 1 UNTIL 511 DO A(I)←X(I)/M ⊃;


NORM(F4,F4);

INSTRUMENT JC_FM1;

COMMENT 

P1 = Begin time
P2 = Duration
P3 = P2	(so that numbering is same as in article)
P4 = Amplitude
P5 = Carrier Freq.
P6 = Modulating Freq.
P7 = Modulation Index 1
P8 = Modulation Index 2
P9 = Wave form for U.G. 1 & 3
P10 = Envelope for U.G. 4 (Carrier)
P11 = Envelope for U.G. 2
;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
		 MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*P6*(P8-P7),MAG/P3,P10),MAG*P6,P9)
		 P9);
END;


INSTRUMENT JC_FM2;

COMMENT 

P1 = Begin time
P2 = Duration
P3 = P2	(so that numbering is same as in article)
P4 = Amplitude
P5 = Carrier Freq.
P6 = Modulating Freq.
P7 = Modulation Index 1
P8 = Modulation Index 2
P9 = Wave form for U.G. 1 & 3
P10 = Envelope for U.G. 4 (Carrier)
P11 = Envelope for U.G. 2
;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
		 MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
		 P9);
END;


PRINT "FM loaded";

PLAY;
     JC_FM1  0 .8 .8 1500 BELLFREQ BELLFREQ*(200/280) 0  4 F1 F3 F4;
     JC_FM2 .4 .8 .8 1500 BELLFREQ BELLFREQ*(200/280) 0  4 F1 F3 F4;
FINISH;